home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
1191
/
1191.xpi
/
chrome
/
reminderfox.jar
/
content
/
reminderfox
/
utils
/
rmFxAttachments.js
next >
Wrap
Text File
|
2009-11-01
|
8KB
|
225 lines
/**
* Eventhandler working for messages with ICS attachment
<br> replacing the attachment name with the METHOD string contained
<br> in the Vcalendar
@see +++2do: 2009-06-20 current version is NOK with inline vcalendar
@author gW
@version 2009-06-20
*/
var rmFx_icsString = "";
var rmFxEventIcon = "chrome://reminderfox/skin/images/eventIcon.png";
var rmFxEventIconSize = 16;
var ICSgContentType;
var ICS_OnMsgLoaded_ORIGINAL = OnMsgLoaded;
var OnMsgLoaded = function(aUrl) {
ICS_OnMsgLoaded_ORIGINAL.apply(this,arguments);
// "ltnModeBox" part of Lightning, disabled here to have feature also w.LG
// if (document.getElementById("ltnModeBox")) return;
var mimeHdr = aUrl.mimeHeaders;
ICSgContentType = mimeHdr.extractHeader("Content-type",false);
//rmFxUtil.dump2Console (" ICSattachment OnMsgLoaded:" + ICSgContentType);
// Vcalendar requests seem to be present just in multipart/alternative body
if (ICSgContentType.indexOf("text/plain") > -1 || ICSgContentType.indexOf("text/html") > -1)
return;
// The primary content-type is useful, to find the boundary string, just if the message
// is multipart/alternative, otherwise we should find the right boundary string in another way
if (ICSgContentType.indexOf("multipart/alternative") < 0 )
ICSgContentType = null;
// Postbox needs this timeout, so it can load all ICS attachments to the datapane Events
setTimeout(ICSparseMsg.start,100);
};
var ICSparseMsg = {
newAttListner: function() {
var attListner = {
scriptStream : null,
QueryInterface : function(iid) {
if (iid.equals(Components.interfaces.nsIStreamListener) ||
iid.equals(Components.interfaces.nsIMsgHeaderSink) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
return 0;
},
onStartRequest : function (aRequest, aContext) {
var channel = aRequest.QueryInterface(Components.interfaces.nsIChannel);
channel.URI.QueryInterface(Components.interfaces.nsIMsgMailNewsUrl);
channel.URI.msgHeaderSink = this;
this.scriptStream = Components.classes['@mozilla.org/binaryinputstream;1']
.createInstance(Components.interfaces.nsIBinaryInputStream);
},
onStopRequest : function (aRequest, aContext, aStatusCode) {
this.scriptStream = null;
},
onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
this.scriptStream.setInputStream(aInputStream);
rmFx_icsString = this.scriptStream.readBytes(aCount);
// rmFxUtil.dump2Console("ICSparseMsg: onDataAvailable: \n\n" + rmFx_icsString);
var cMethod = "";
// delete all CR characters
rmFx_icsString = rmFx_icsString.replace(new RegExp(/\r/g),"");
var fnd = rmFx_icsString.indexOf("METHOD:");
if (fnd != -1) {
rmFx_icsString = rmFx_icsString.substring(fnd + 7);
cMethod = rmFx_icsString.substring( 0, rmFx_icsString.indexOf("\n"));
var theChild = document.getElementById("rmFX_Event");
if (theChild != null) {
// replaced the file name
theChild.attributes["label"].value = "iCal " + cMethod;
// tag the msg
rmFx_msgTAGing("iCal-" + cMethod, true, "#993399");
/* ------
* +++2do doesn't work right now
// enable dbl click to work with RmFx on the event
theChild.setAttribute("ondblclick", "rmFxGetiCalMailed();");
----- */
}
}
},
onStartHeaders: function() {},
onEndHeaders: function() {},
processHeaders: function(headerNameEnumerator, headerValueEnumerator, dontCollectAddress) {},
// The extension can work because natively Thunderbird
// collect in this functions also multipart/alternative parts
// even if they are not real attachments
handleAttachment: function(contentType, url, displayName, uri, isExternalAttachment) {
// rmFxUtil.dump2Console (" handleAttachment: \n\n" + contentType + " " + displayName);
if ( displayName.indexOf(".vcs") < 0
&& displayName.indexOf(".ics")
&& (contentType == "text/calendar" || contentType =="text/x-calendar") ) {
var childList = document.getElementById('attachmentList');
// Postbox special
if (childList == null)
childList = document.getElementById('dataPaneEventList');
var nodes = childList.childNodes.length
for (var i=0; i< nodes; i++) {
var cName = childList.childNodes[i].attachment.displayName;
if (cName.toLowerCase().indexOf(".ics") > -1) {
childList.childNodes[i].attributes["image"].value
= rmFxEventIcon + "?size=" + rmFxEventIconSize + "&contentType=text/calendar";
childList.childNodes[i].id ="rmFX_Event"
}
}
this.index++;
}
},
onEndAllAttachments: function() {},
onEndMsgDownload: function(url) {},
onEndMsgHeaders: function(url) {},
onMsgHasRemoteContent: function(aMsgHdr) {},
getSecurityInfo: function() {},
setSecurityInfo: function(aSecurityInfo) {},
getDummyMsgHeader: function() {}
};
return attListner;
},
start: function() {
rmFx_icsString = "";
// SM2 ??? || (gRmFx_Messenger == "SM2") // || (gRmFx_Messenger == "PB"))
/*
if (gRmFx_Messenger == "TB3") {
var msgUri = gMessageDisplay.folderDisplay.selectedMessageUris[0];
} else {
var msgUri = GetLoadedMessage();
}
*/
if ((gRmFx_Messenger == "TB3") || (gRmFx_Messenger == "SM2")) {
var msgUri = gFolderDisplay.selectedMessageUris[0];
}
var mms = messenger.messageServiceFromURI(msgUri)
.QueryInterface(Components.interfaces.nsIMsgMessageService);
var streamListner = ICSparseMsg.newAttListner();
streamListner.index = 0;
var newUri = mms.streamMessage(msgUri, streamListner, null, null, true, "filter");
var x=0;
}
}
/**
* Read the whole selected message (including attachments) to a string
*
<p> @return content , if read fails: alert and return null
*/
function rmFxReadSelectedMsg () {
var content = "";
var MessageURI = GetFirstSelectedMessage();
var MsgService = messenger.messageServiceFromURI(MessageURI);
var MsgStream = Components.classes["@mozilla.org/network/sync-stream-listener;1"]
.createInstance();
var consumer = MsgStream.QueryInterface(Components.interfaces.nsIInputStream);
var ScriptInput = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance();
var ScriptInputStream = ScriptInput.QueryInterface(Components.interfaces.nsIScriptableInputStream);
ScriptInputStream.init(consumer);
try {
MsgService.streamMessage(MessageURI, MsgStream, msgWindow, null, false, null);
} catch (ex) {
alert(" Error: "+ex);
return null;
}
ScriptInputStream .available();
while (ScriptInputStream .available()) {
content = content + ScriptInputStream .read(512);
}
return content;
}